#ifndef _NE_BILLBOARD_H_
#define _NE_BILLBOARD_H_

#include <mathematics/Color.h>
#include <mathematics/Matrix4.h>

namespace ne
{
    class NEAPI Billboard
    {
        public:
            Billboard();

            Billboard(const Billboard &bb);
            
            Billboard& operator = (const Billboard &bb);

            virtual void setSize(const real w, const real h);

            virtual void resetSize();

            /* *------1
               |      |
               |      |
               |      |
               0------*
            */
            virtual Vector4 getTexCoord() const;
            virtual void setTexCoord(const Vector4 &t01);
            virtual void setTexCoord(const Vector2 &t0, const Vector2 &t1);

            virtual void setTexCoord(const real u0, const real v0,
                                     const real u1, const real v1);

            virtual void resetTexCoord();

            virtual ~Billboard();

        public:
            Vector3 position;
            real width;
            real height;
            Vector3 axis;
            real rotation;
            Color color;
            Vector2 texCoords[2];
    };

    typedef std::vector<Billboard*> BillboardVector;
    typedef BillboardVector::iterator BillboardVectorIterator;
    typedef BillboardVector::const_iterator BillboardVectorConstIterator;

    typedef std::list<Billboard*> BillboardList;
    typedef BillboardList::iterator BillboardListIterator;
    typedef BillboardList::const_iterator BillboardListConstIterator;
}

#endif
